home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / Sound.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  22.1 KB  |  594 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        Sound.mod
  3.  
  4.      Contains:    Sound Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$IF UNDEFINED OLDROUTINENAMES*)
  21. (*$SET OLDROUTINENAMES FALSE*)
  22. (*$END*)
  23. (*$TAGS-*)
  24. (*$CALLING PASCAL*)
  25. MODULE Sound;
  26.  
  27. IMPORT SYSTEM, Types;
  28.  
  29. (* $PUSH*)
  30. (* $ALIGN MAC68K*)
  31. (* $LibExport+*)
  32. (*
  33. Interface for Sound Driver, !!! OBSOLETE and NOT SUPPORTED !!!
  34.  
  35. These items are no longer defined, but appear here so that someone
  36. searching the interfaces might find them. If you are using one of these
  37. items, you must change your code to support the Sound Manager.
  38.  
  39.     swMode, ftMode, ffMode
  40.     Sound.FreeWave, Sound.FFSynthRec, Sound.Tone, Sound.SWSynthRec, Sound.Wave, Sound.FTSoundRec
  41.     SndCompletionProcPtr
  42.     StartSound, StopSound, SoundDone
  43. *)
  44. CONST
  45.     twelfthRootTwo*                = 1.05946309434;
  46.     soundListRsrc*                = LONG("snd ");                        (*Resource type used by Sound Manager*)
  47.     rate44khz*                    = $AC440000;                    (*44100.00000 in fixed-point*)
  48.     rate22050hz*                    = $56220000;                    (*22050.00000 in fixed-point*)
  49.     rate22khz*                    = $56EE8BA3;                    (*22254.54545 in fixed-point*)
  50.     rate11khz*                    = $2B7745D1;                    (*11127.27273 in fixed-point*)
  51.     rate11025hz*                    = $2B110000;                    (*11025.00000 in fixed-point*)
  52. (*synthesizer numbers for SndNewChannel*)
  53.     squareWaveSynth*                = 1;                            (*square wave synthesizer*)
  54.     waveTableSynth*                = 3;                            (*wave table synthesizer*)
  55.     sampledSynth*                = 5;                            (*sampled sound synthesizer*)
  56. (*old Sound Manager MACE synthesizer numbers*)
  57.     MACE3snthID*                    = 11;
  58.     MACE6snthID*                    = 13;
  59.     kMiddleC*                    = 60;                            (*MIDI note value for middle C*)
  60.     kSimpleBeepID*                = 1;                            (*reserved resource AIFF.ID for Simple Beep*)
  61.     kFullVolume*                    = $0100;                        (*1.0, setting for full hardware output volume*)
  62.     kNoVolume*                    = 0;                            (*setting for no sound volume*)
  63. (*command numbers for SndDoCommand and SndDoImmediate*)
  64.     nullCmd*                        = 0;
  65.     initCmd*                        = 1;
  66.     freeCmd*                        = 2;
  67.     quietCmd*                    = 3;
  68.     flushCmd*                    = 4;
  69.     reInitCmd*                    = 5;
  70.     waitCmd*                        = 10;
  71.     pauseCmd*                    = 11;
  72.     resumeCmd*                    = 12;
  73.     callBackCmd*                    = 13;
  74.  
  75.     syncCmd*                        = 14;
  76.     availableCmd*                = 24;
  77.     versionCmd*                    = 25;
  78.     totalLoadCmd*                = 26;
  79.     loadCmd*                        = 27;
  80.     freqDurationCmd*                = 40;
  81.     restCmd*                        = 41;
  82.     freqCmd*                        = 42;
  83.     ampCmd*                        = 43;
  84.     timbreCmd*                    = 44;
  85.     getAmpCmd*                    = 45;
  86.     volumeCmd*                    = 46;                            (*sound manager 3.0 or later only*)
  87.     getVolumeCmd*                = 47;                            (*sound manager 3.0 or later only*)
  88.     waveTableCmd*                = 60;
  89.     phaseCmd*                    = 61;
  90.  
  91.     soundCmd*                    = 80;
  92.     bufferCmd*                    = 81;
  93.     rateCmd*                        = 82;
  94.     continueCmd*                    = 83;
  95.     doubleBufferCmd*                = 84;
  96.     getRateCmd*                    = 85;
  97.     rateMultiplierCmd*            = 86;
  98.     getRateMultiplierCmd*        = 87;
  99.     sizeCmd*                        = 90;
  100.     convertCmd*                    = 91;
  101.     stdQLength*                    = 128;
  102.     dataOffsetFlag*                = $8000;
  103.  
  104. (*channel initialization parameters*)
  105. (*$IF OLDROUTINENAMES *)
  106.     waveInitChannelMask*            = $07;
  107.     waveInitChannel0*            = $04;                            (*wave table only, Sound Manager 2.0 and earlier*)
  108.     waveInitChannel1*            = $05;                            (*wave table only, Sound Manager 2.0 and earlier*)
  109.     waveInitChannel2*            = $06;                            (*wave table only, Sound Manager 2.0 and earlier*)
  110.     waveInitChannel3*            = $07;                            (*wave table only, Sound Manager 2.0 and earlier*)
  111.     initChan0*                    = waveInitChannel0;                (*obsolete spelling*)
  112.     initChan1*                    = waveInitChannel1;                (*obsolete spelling*)
  113.     initChan2*                    = waveInitChannel2;                (*obsolete spelling*)
  114.     initChan3*                    = waveInitChannel3;                (*obsolete spelling*)
  115.  
  116. (*$END*)
  117.     initChanLeft*                = $0002;                        (*left stereo channel*)
  118.     initChanRight*                = $0003;                        (*right stereo channel*)
  119.     initNoInterp*                = $0004;                        (*no linear interpolation*)
  120.     initNoDrop*                    = $0008;                        (*no drop-sample conversion*)
  121.     initMono*                    = $0080;                        (*monophonic channel*)
  122.     initStereo*                    = $00C0;                        (*stereo channel*)
  123.     initMACE3*                    = $0300;                        (*MACE 3:1*)
  124.     initMACE6*                    = $0400;                        (*MACE 6:1*)
  125.     initPanMask*                    = $0003;                        (*mask for right/left pan values*)
  126.     initSRateMask*                = $0030;                        (*mask for sample rate values*)
  127.     initStereoMask*                = $00C0;                        (*mask for mono/stereo values*)
  128.     initCompMask*                = $FF00;                        (*mask for compression IDs*)
  129.     kUseOptionalOutputDevice*    = -1;                            (*only for Sound Manager 3.0 or later*)
  130.     notCompressed*                = 0;                            (*compression AIFF.ID's*)
  131.     fixedCompression*            = -1;                            (*compression AIFF.ID for fixed-sized compression*)
  132.     variableCompression*            = -2;                            (*compression AIFF.ID for variable-sized compression*)
  133.     twoToOne*                    = 1;
  134.     eightToThree*                = 2;
  135.     threeToOne*                    = 3;
  136.     sixToOne*                    = 4;
  137.  
  138.     stdSH*                        = $00;                            (*Standard sound header encode value*)
  139.     extSH*                        = $FF;                            (*Extended sound header encode value*)
  140.     cmpSH*                        = $FE;                            (*Compressed sound header encode value*)
  141.  
  142.     outsideCmpSH*                = 0;                            (*MACE constants*)
  143.     insideCmpSH*                    = 1;
  144.     aceSuccess*                    = 0;
  145.     aceMemFull*                    = 1;
  146.     aceNilBlock*                    = 2;
  147.     aceBadComp*                    = 3;
  148.     aceBadEncode*                = 4;
  149.     aceBadDest*                    = 5;
  150.     aceBadCmd*                    = 6;
  151.     sixToOnePacketSize*            = 8;
  152.     threeToOnePacketSize*        = 16;
  153.     stateBlockSize*                = 64;
  154.     leftOverBlockSize*            = 32;
  155.     firstSoundFormat*            = $0001;                        (*general sound format*)
  156.     secondSoundFormat*            = $0002;                        (*special sampled sound format (HyperCard)*)
  157.     dbBufferReady*                = $00000001;                    (*double buffer is filled*)
  158.     dbLastBuffer*                = $00000004;                    (*last double buffer to play*)
  159.     sysBeepDisable*                = $0000;                        (*SysBeep() enable flags*)
  160.     sysBeepEnable*                = $0001;
  161.     unitTypeNoSelection*            = $FFFF;                        (*unitTypes for Sound.AudioSelection.unitType*)
  162.     unitTypeSeconds*                = $0000;
  163.  
  164. (* unsigned fixed-point number *)
  165.     
  166. TYPE
  167.     UnsignedFixed* = LONGINT;
  168.  
  169.     SndCommand* = (*ΔΔPACKEDΔΔ*) RECORD
  170.         cmd*:                    INTEGER;
  171.         param1*:                    INTEGER;
  172.         param2*:                    LONGINT;
  173.     END;
  174.  
  175.     SndChannelPtr* = POINTER TO SndChannel;
  176.  
  177.     SndCallBackProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (chan: SndChannelPtr; VAR cmd: SndCommand);
  178.     SndCallBackUPP* = Types.UniversalProcPtr;
  179.  
  180.     SndChannel* = (*ΔΔPACKEDΔΔ*) RECORD
  181.         nextChan*:                SndChannelPtr (*ΔΔ POINTER TO SndChannel*);
  182.         firstMod*:                Types.Ptr;                                    (* reserved for the Sound Manager *)
  183.         callBack*:                SndCallBackUPP;
  184.         userInfo*:                LONGINT;
  185.         wait*:                    LONGINT;                                (* The following is for internal Sound Manager use only.*)
  186.         cmdInProgress*:            SndCommand;
  187.         flags*:                    INTEGER;
  188.         qLength*:                INTEGER;
  189.         qHead*:                    INTEGER;
  190.         qTail*:                    INTEGER;
  191.         queue*:                    ARRAY (*ΔΔ[0..*)stdQLength(*ΔΔ -1]ΔΔ*) OF SndCommand;
  192.     END;
  193.  
  194. (*MACE structures*)
  195.     StateBlock* = RECORD
  196.         stateVar*:                ARRAY (*ΔΔ[0..*)stateBlockSize(*ΔΔ -1]ΔΔ*) OF INTEGER;
  197.     END;
  198.  
  199.     StateBlockPtr* = POINTER TO StateBlock;
  200.  
  201.     LeftOverBlock* = RECORD
  202.         count*:                    LONGINT;
  203.         sampleArea*:                (*ΔΔPACKEDΔΔ*) ARRAY (*ΔΔ[0..*)leftOverBlockSize(*ΔΔ -1]ΔΔ*) OF CHAR;
  204.     END;
  205.  
  206.     LeftOverBlockPtr* = POINTER TO LeftOverBlock;
  207.  
  208.     ModRef* = RECORD
  209.         modNumber*:                INTEGER;
  210.         modInit*:                LONGINT;
  211.     END;
  212.  
  213.     SndListResource* = RECORD
  214.         format*:                    INTEGER;
  215.         numModifiers*:            INTEGER;
  216.         modifierPart*:            ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF ModRef;                    (*This is a variable length array*)
  217.         numCommands*:            INTEGER;
  218.         commandPart*:            ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF SndCommand;                (*This is a variable length array*)
  219.         dataPart*:                (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;            (*This is a variable length array*)
  220.     END;
  221.  
  222.     SndListPtr* = POINTER TO SndListResource;
  223.  
  224.     SndListHndl* = HANDLE TO SndListResource (*ΔΔ POINTER TO SndListPtr*);
  225.     SndListHandle* = HANDLE TO SndListResource (*ΔΔ POINTER TO SndListPtr*);
  226.  
  227. (*HyperCard sound resource format*)
  228.     Snd2ListResource* = RECORD
  229.         format*:                    INTEGER;
  230.         refCount*:                INTEGER;
  231.         numCommands*:            INTEGER;
  232.         commandPart*:            ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF SndCommand;                (*This is a variable length array*)
  233.         dataPart*:                (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;            (*This is a variable length array*)
  234.     END;
  235.  
  236.     Snd2ListPtr* = POINTER TO Snd2ListResource;
  237.  
  238.     Snd2ListHndl* = HANDLE TO Snd2ListResource (*ΔΔ POINTER TO Snd2ListPtr*);
  239.     Snd2ListHandle* = HANDLE TO Snd2ListResource (*ΔΔ POINTER TO Snd2ListPtr*);
  240.  
  241.     SoundHeader* = (*ΔΔPACKEDΔΔ*) RECORD
  242.         samplePtr*:                Types.Ptr;                                    (*if NIL then samples are in sampleArea*)
  243.         length*:                    LONGINT;                                (*length of sound in bytes*)
  244.         sampleRate*:                UnsignedFixed;                            (*sample rate for this sound*)
  245.         loopStart*:                LONGINT;                                (*start of looping portion*)
  246.         loopEnd*:                LONGINT;                                (*end of looping portion*)
  247.         encode*:                    CHAR;                                    (*header encoding*)
  248.         baseFrequency*:            CHAR;                                    (*baseFrequency value*)
  249.         sampleArea*:                (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;            (*space for when samples follow directly*)
  250.     END;
  251.  
  252.     SoundHeaderPtr* = POINTER TO SoundHeader;
  253.  
  254.     CmpSoundHeader* = (*ΔΔPACKEDΔΔ*) RECORD
  255.         samplePtr*:                Types.Ptr;                                    (*if nil then samples are in sample area*)
  256.         numChannels*:            LONGINT;                                (*number of channels i.e. mono* = 1*)
  257.         sampleRate*:                UnsignedFixed;                            (*sample rate in Apples Types.Fixed point representation*)
  258.         loopStart*:                LONGINT;                                (*loopStart of sound before compression*)
  259.         loopEnd*:                LONGINT;                                (*loopEnd of sound before compression*)
  260.         encode*:                    CHAR;                                    (*data structure used , stdSH, extSH, or cmpSH*)
  261.         baseFrequency*:            CHAR;                                    (*same meaning as regular SoundHeader*)
  262.         numFrames*:                LONGINT;                                (*length in frames ( packetFrames or sampleFrames )*)
  263.         AIFFSampleRate*:            Types.Extended80;                                (*IEEE sample rate*)
  264.         markerChunk*:            Types.Ptr;                                    (*sync track*)
  265.         format*:                    Types.OSType;                                    (*data format type, was futureUse1*)
  266.         futureUse2*:                LONGINT;                                (*reserved by Apple*)
  267.         stateVars*:                StateBlockPtr;                            (*pointer to State Block*)
  268.         leftOverSamples*:        LeftOverBlockPtr;                        (*used to save truncated samples between compression calls*)
  269.         compressionID*:            INTEGER;                                (*0 means no compression, non zero means compressionID*)
  270.         packetSize*:                INTEGER;                                (*number of bits in compressed sample packet*)
  271.         snthID*:                    INTEGER;                                (*resource AIFF.ID of Sound Manager snth that contains NRT C/E*)
  272.         sampleSize*:                INTEGER;                                (*number of bits in non-compressed sample*)
  273.         sampleArea*:                (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;            (*space for when samples follow directly*)
  274.     END;
  275.  
  276.     CmpSoundHeaderPtr* = POINTER TO CmpSoundHeader;
  277.  
  278.     ExtSoundHeader* = (*ΔΔPACKEDΔΔ*) RECORD
  279.         samplePtr*:                Types.Ptr;                                    (*if nil then samples are in sample area*)
  280.         numChannels*:            LONGINT;                                (*number of channels,  ie mono* = 1*)
  281.         sampleRate*:                UnsignedFixed;                            (*sample rate in Apples Types.Fixed point representation*)
  282.         loopStart*:                LONGINT;                                (*same meaning as regular SoundHeader*)
  283.         loopEnd*:                LONGINT;                                (*same meaning as regular SoundHeader*)
  284.         encode*:                    CHAR;                                    (*data structure used , stdSH, extSH, or cmpSH*)
  285.         baseFrequency*:            CHAR;                                    (*same meaning as regular SoundHeader*)
  286.         numFrames*:                LONGINT;                                (*length in total number of frames*)
  287.         AIFFSampleRate*:            Types.Extended80;                                (*IEEE sample rate*)
  288.         markerChunk*:            Types.Ptr;                                    (*sync track*)
  289.         instrumentChunks*:        Types.Ptr;                                    (*AIFF instrument chunks*)
  290.         AESRecording*:            Types.Ptr;
  291.         sampleSize*:                INTEGER;                                (*number of bits in sample*)
  292.         futureUse1*:                INTEGER;                                (*reserved by Apple*)
  293.         futureUse2*:                LONGINT;                                (*reserved by Apple*)
  294.         futureUse3*:                LONGINT;                                (*reserved by Apple*)
  295.         futureUse4*:                LONGINT;                                (*reserved by Apple*)
  296.         sampleArea*:                (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;            (*space for when samples follow directly*)
  297.     END;
  298.  
  299.     ExtSoundHeaderPtr* = POINTER TO ExtSoundHeader;
  300.  
  301.     ConversionBlock* = RECORD
  302.         destination*:            INTEGER;
  303.         unused*:                    INTEGER;
  304.         inputPtr*:                CmpSoundHeaderPtr;
  305.         outputPtr*:                CmpSoundHeaderPtr;
  306.     END;
  307.  
  308.     ConversionBlockPtr* = POINTER TO ConversionBlock;
  309.  
  310.     SMStatus* = (*ΔΔPACKEDΔΔ*) RECORD
  311.         smMaxCPULoad*:            INTEGER;
  312.         smNumChannels*:            INTEGER;
  313.         smCurCPULoad*:            INTEGER;
  314.     END;
  315.  
  316.     SMStatusPtr* = POINTER TO SMStatus;
  317.  
  318.     SCStatus* = RECORD
  319.         scStartTime*:            UnsignedFixed;
  320.         scEndTime*:                UnsignedFixed;
  321.         scCurrentTime*:            UnsignedFixed;
  322.         scChannelBusy*:            BOOLEAN;
  323.         scChannelDisposed*:        BOOLEAN;
  324.         scChannelPaused*:        BOOLEAN;
  325.         scUnused*:                BOOLEAN;
  326.         scChannelAttributes*:    LONGINT;
  327.         scCPULoad*:                LONGINT;
  328.     END;
  329.  
  330.     SCStatusPtr* = POINTER TO SCStatus;
  331.  
  332.     AudioSelection* = (*ΔΔPACKEDΔΔ*) RECORD
  333.         unitType*:                LONGINT;
  334.         selStart*:                UnsignedFixed;
  335.         selEnd*:                    UnsignedFixed;
  336.     END;
  337.  
  338.     FilePlayCompletionProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (chan: SndChannelPtr);
  339.     FilePlayCompletionUPP* = Types.UniversalProcPtr;
  340.  
  341. CONST
  342.     uppFilePlayCompletionProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *)
  343.  
  344. PROCEDURE NewFilePlayCompletionProc*(userRoutine: FilePlayCompletionProcPtr): FilePlayCompletionUPP;
  345.     (*$IF NOT GENERATINGCFM *)
  346.     INLINE PASCAL $2E9F;
  347.     (*$END*)
  348.  
  349. PROCEDURE CallFilePlayCompletionProc*(chan: SndChannelPtr; userRoutine: FilePlayCompletionUPP);
  350.     (*$IF NOT GENERATINGCFM*)
  351.     INLINE PASCAL $205F, $4E90;
  352.     (*$END*)
  353.     
  354. TYPE
  355.     AudioSelectionPtr* = POINTER TO AudioSelection;
  356.  
  357.     SndDoubleBuffer* = (*ΔΔPACKEDΔΔ*) RECORD
  358.         dbNumFrames*:            LONGINT;
  359.         dbFlags*:                LONGINT;
  360.         dbUserInfo*:                ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF LONGINT;
  361.         dbSoundData*:            (*ΔΔPACKEDΔΔ*) ARRAY 1 (*ΔΔ[0..0]ΔΔ*) OF CHAR;
  362.     END;
  363.  
  364.     SndDoubleBufferPtr* = POINTER TO SndDoubleBuffer;
  365.  
  366.     SndDoubleBackProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (channel: SndChannelPtr; doubleBufferPtr: SndDoubleBufferPtr);
  367.     SndDoubleBackUPP* = Types.UniversalProcPtr;
  368.  
  369. CONST
  370.     uppSndDoubleBackProcInfo* = $000003C0; (* PROCEDURE (4 byte param, 4 byte param); *)
  371.  
  372. PROCEDURE NewSndDoubleBackProc*(userRoutine: SndDoubleBackProcPtr): SndDoubleBackUPP;
  373.     (*$IF NOT GENERATINGCFM *)
  374.     INLINE PASCAL $2E9F;
  375.     (*$END*)
  376.  
  377. PROCEDURE CallSndDoubleBackProc*(channel: SndChannelPtr; doubleBufferPtr: SndDoubleBufferPtr; userRoutine: SndDoubleBackUPP);
  378.     (*$IF NOT GENERATINGCFM*)
  379.     INLINE PASCAL $205F, $4E90;
  380.     (*$END*)
  381.  
  382. TYPE
  383.     SndDoubleBufferHeader* = (*ΔΔPACKEDΔΔ*) RECORD
  384.         dbhNumChannels*:            INTEGER;
  385.         dbhSampleSize*:            INTEGER;
  386.         dbhCompressionID*:        INTEGER;
  387.         dbhPacketSize*:            INTEGER;
  388.         dbhSampleRate*:            UnsignedFixed;
  389.         dbhBufferPtr*:            ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF SndDoubleBufferPtr;
  390.         dbhDoubleBack*:            SndDoubleBackUPP;
  391.     END;
  392.  
  393.     SndDoubleBufferHeaderPtr* = POINTER TO SndDoubleBufferHeader;
  394.  
  395.     SndDoubleBufferHeader2* = (*ΔΔPACKEDΔΔ*) RECORD
  396.         dbhNumChannels*:            INTEGER;
  397.         dbhSampleSize*:            INTEGER;
  398.         dbhCompressionID*:        INTEGER;
  399.         dbhPacketSize*:            INTEGER;
  400.         dbhSampleRate*:            UnsignedFixed;
  401.         dbhBufferPtr*:            ARRAY 2 (*ΔΔ[0..1]ΔΔ*) OF SndDoubleBufferPtr;
  402.         dbhDoubleBack*:            SndDoubleBackUPP;
  403.         dbhFormat*:                Types.OSType;
  404.     END;
  405.  
  406.     SndDoubleBufferHeader2Ptr* = POINTER TO SndDoubleBufferHeader2;
  407.  
  408.     SoundInfoList* = (*ΔΔPACKEDΔΔ*) RECORD
  409.         count*:                    INTEGER;
  410.         infoHandle*:                Types.Handle;
  411.     END;
  412.  
  413.     SoundInfoListPtr* = POINTER TO SoundInfoList;
  414.  
  415.     CompressionInfo* = RECORD
  416.         recordSize*:                LONGINT;
  417.         format*:                    Types.OSType;
  418.         compressionID*:            INTEGER;
  419.         samplesPerPacket*:        INTEGER;
  420.         bytesPerPacket*:            INTEGER;
  421.         bytesPerFrame*:            INTEGER;
  422.         bytesPerSample*:            INTEGER;
  423.         futureUse1*:                INTEGER;
  424.     END;
  425.  
  426.     CompressionInfoPtr* = POINTER TO CompressionInfo;
  427.  
  428.     CompressionInfoHandle* = HANDLE TO CompressionInfo (*ΔΔ POINTER TO CompressionInfoPtr*);
  429.  
  430. (* These two routines for Get/SetSoundVol should no longer be used.*)
  431. (* They were for old Apple Sound Chip machines, and do not support the DSP or PowerMacs.*)
  432. (* Use Get/SetDefaultOutputVolume instead, if you must change the user's machine.*)
  433. (*$IF OLDROUTINENAMES AND NOT GENERATINGCFM *)
  434.  
  435. PROCEDURE SetSoundVol*(level: INTEGER);
  436.     EXTERNAL PASCAL;
  437. PROCEDURE GetSoundVol*(VAR level: INTEGER);
  438.     (*$IF NOT GENERATINGCFM*)
  439.     INLINE PASCAL $205F, $4218, $10B8, $0260;
  440.     (*$END*)
  441. (*$END*)
  442.  
  443. PROCEDURE SndDoCommand*(chan: SndChannelPtr; (*CONST*)VAR cmd: SndCommand; noWait: BOOLEAN): Types.OSErr;
  444.     (*$IF NOT GENERATINGCFM*)
  445.     INLINE PASCAL $A803;
  446.     (*$END*)
  447. PROCEDURE SndDoImmediate*(chan: SndChannelPtr; (*CONST*)VAR cmd: SndCommand): Types.OSErr;
  448.     (*$IF NOT GENERATINGCFM*)
  449.     INLINE PASCAL $A804;
  450.     (*$END*)
  451. PROCEDURE SndNewChannel*(VAR chan: SndChannelPtr; synth: INTEGER; init: LONGINT; userRoutine: SndCallBackUPP): Types.OSErr;
  452.     (*$IF NOT GENERATINGCFM*)
  453.     INLINE PASCAL $A807;
  454.     (*$END*)
  455. PROCEDURE SndDisposeChannel*(chan: SndChannelPtr; quietNow: BOOLEAN): Types.OSErr;
  456.     (*$IF NOT GENERATINGCFM*)
  457.     INLINE PASCAL $A801;
  458.     (*$END*)
  459. PROCEDURE SndPlay*(chan: SndChannelPtr; sndHdl: SndListHandle; async: BOOLEAN): Types.OSErr;
  460.     (*$IF NOT GENERATINGCFM*)
  461.     INLINE PASCAL $A805;
  462.     (*$END*)
  463. (*$IF OLDROUTINENAMES *)
  464. PROCEDURE SndAddModifier*(chan: SndChannelPtr; modifier: Types.Ptr; id: INTEGER; init: LONGINT): Types.OSErr;
  465.     (*$IF NOT GENERATINGCFM*)
  466.     INLINE PASCAL $A802;
  467.     (*$END*)
  468. (*$END*)
  469. PROCEDURE SndControl*(id: INTEGER; VAR cmd: SndCommand): Types.OSErr;
  470.     (*$IF NOT GENERATINGCFM*)
  471.     INLINE PASCAL $A806;
  472.     (*$END*)
  473. (* Sound Manager 2.0 and later, uses _SoundDispatch *)
  474. PROCEDURE SndSoundManagerVersion*(): LONGINT (*ΔΔ NumVersion*);
  475.     (*$IF NOT GENERATINGCFM*)
  476.     INLINE PASCAL $203C, $000C, $0008, $A800;
  477.     (*$END*)
  478. PROCEDURE SndStartFilePlay*(chan: SndChannelPtr; fRefNum: INTEGER; resNum: INTEGER; bufferSize: LONGINT; theBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; theSelection: AudioSelectionPtr; theCompletion: FilePlayCompletionUPP; async: BOOLEAN): Types.OSErr;
  479.     (*$IF NOT GENERATINGCFM*)
  480.     INLINE PASCAL $203C, $0D00, $0008, $A800;
  481.     (*$END*)
  482. PROCEDURE SndPauseFilePlay*(chan: SndChannelPtr): Types.OSErr;
  483.     (*$IF NOT GENERATINGCFM*)
  484.     INLINE PASCAL $203C, $0204, $0008, $A800;
  485.     (*$END*)
  486. PROCEDURE SndStopFilePlay*(chan: SndChannelPtr; quietNow: BOOLEAN): Types.OSErr;
  487.     (*$IF NOT GENERATINGCFM*)
  488.     INLINE PASCAL $203C, $0308, $0008, $A800;
  489.     (*$END*)
  490. PROCEDURE SndChannelStatus*(chan: SndChannelPtr; theLength: INTEGER; theStatus: SCStatusPtr): Types.OSErr;
  491.     (*$IF NOT GENERATINGCFM*)
  492.     INLINE PASCAL $203C, $0510, $0008, $A800;
  493.     (*$END*)
  494. PROCEDURE SndManagerStatus*(theLength: INTEGER; theStatus: SMStatusPtr): Types.OSErr;
  495.     (*$IF NOT GENERATINGCFM*)
  496.     INLINE PASCAL $203C, $0314, $0008, $A800;
  497.     (*$END*)
  498. PROCEDURE SndGetSysBeepState*(VAR sysBeepState: INTEGER);
  499.     (*$IF NOT GENERATINGCFM*)
  500.     INLINE PASCAL $203C, $0218, $0008, $A800;
  501.     (*$END*)
  502. PROCEDURE SndSetSysBeepState*(sysBeepState: INTEGER): Types.OSErr;
  503.     (*$IF NOT GENERATINGCFM*)
  504.     INLINE PASCAL $203C, $011C, $0008, $A800;
  505.     (*$END*)
  506. PROCEDURE SndPlayDoubleBuffer*(chan: SndChannelPtr; theParams: SndDoubleBufferHeaderPtr): Types.OSErr;
  507.     (*$IF NOT GENERATINGCFM*)
  508.     INLINE PASCAL $203C, $0420, $0008, $A800;
  509.     (*$END*)
  510. (* MACE compression routines *)
  511. PROCEDURE MACEVersion*(): LONGINT (*ΔΔ NumVersion*);
  512.     (*$IF NOT GENERATINGCFM*)
  513.     INLINE PASCAL $203C, $0000, $0010, $A800;
  514.     (*$END*)
  515. PROCEDURE Comp3to1*(inBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; outBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; cnt: LONGINT; inState: StateBlockPtr; outState: StateBlockPtr; numChannels: LONGINT; whichChannel: LONGINT);
  516.     (*$IF NOT GENERATINGCFM*)
  517.     INLINE PASCAL $203C, $0004, $0010, $A800;
  518.     (*$END*)
  519. PROCEDURE Exp1to3*(inBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; outBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; cnt: LONGINT; inState: StateBlockPtr; outState: StateBlockPtr; numChannels: LONGINT; whichChannel: LONGINT);
  520.     (*$IF NOT GENERATINGCFM*)
  521.     INLINE PASCAL $203C, $0008, $0010, $A800;
  522.     (*$END*)
  523. PROCEDURE Comp6to1*(inBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; outBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; cnt: LONGINT; inState: StateBlockPtr; outState: StateBlockPtr; numChannels: LONGINT; whichChannel: LONGINT);
  524.     (*$IF NOT GENERATINGCFM*)
  525.     INLINE PASCAL $203C, $000C, $0010, $A800;
  526.     (*$END*)
  527. PROCEDURE Exp1to6*(inBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; outBuffer: (*ΔΔUNIVΔΔ*) Types.Ptr; cnt: LONGINT; inState: StateBlockPtr; outState: StateBlockPtr; numChannels: LONGINT; whichChannel: LONGINT);
  528.     (*$IF NOT GENERATINGCFM*)
  529.     INLINE PASCAL $203C, $0010, $0010, $A800;
  530.     (*$END*)
  531. (* Sound Manager 3.0 and later calls *)
  532. PROCEDURE GetSysBeepVolume*(VAR level: LONGINT): Types.OSErr;
  533.     (*$IF NOT GENERATINGCFM*)
  534.     INLINE PASCAL $203C, $0224, $0018, $A800;
  535.     (*$END*)
  536. PROCEDURE SetSysBeepVolume*(level: LONGINT): Types.OSErr;
  537.     (*$IF NOT GENERATINGCFM*)
  538.     INLINE PASCAL $203C, $0228, $0018, $A800;
  539.     (*$END*)
  540. PROCEDURE GetDefaultOutputVolume*(VAR level: LONGINT): Types.OSErr;
  541.     (*$IF NOT GENERATINGCFM*)
  542.     INLINE PASCAL $203C, $022C, $0018, $A800;
  543.     (*$END*)
  544. PROCEDURE SetDefaultOutputVolume*(level: LONGINT): Types.OSErr;
  545.     (*$IF NOT GENERATINGCFM*)
  546.     INLINE PASCAL $203C, $0230, $0018, $A800;
  547.     (*$END*)
  548. PROCEDURE GetSoundHeaderOffset*(sndHandle: SndListHandle; VAR offset: LONGINT): Types.OSErr;
  549.     (*$IF NOT GENERATINGCFM*)
  550.     INLINE PASCAL $203C, $0404, $0018, $A800;
  551.     (*$END*)
  552. PROCEDURE UnsignedFixedMulDiv*(value: UnsignedFixed; multiplier: UnsignedFixed; divisor: UnsignedFixed): UnsignedFixed;
  553.     (*$IF NOT GENERATINGCFM*)
  554.     INLINE PASCAL $203C, $060C, $0018, $A800;
  555.     (*$END*)
  556. PROCEDURE GetCompressionInfo*(compressionID: INTEGER; format: Types.OSType; numChannels: INTEGER; sampleSize: INTEGER; cp: CompressionInfoPtr): Types.OSErr;
  557.     (*$IF NOT GENERATINGCFM*)
  558.     INLINE PASCAL $203C, $0710, $0018, $A800;
  559.     (*$END*)
  560. PROCEDURE SetSoundPreference*(theType: Types.OSType; VAR name: Types.Str255; settings: Types.Handle): Types.OSErr;
  561.     (*$IF NOT GENERATINGCFM*)
  562.     INLINE PASCAL $203C, $0634, $0018, $A800;
  563.     (*$END*)
  564. PROCEDURE GetSoundPreference*(theType: Types.OSType; VAR name: Types.Str255; settings: Types.Handle): Types.OSErr;
  565.     (*$IF NOT GENERATINGCFM*)
  566.     INLINE PASCAL $203C, $0638, $0018, $A800;
  567.     (*$END*)
  568. (* Sound Manager 3.1 and later calls *)
  569. PROCEDURE SndGetInfo*(chan: SndChannelPtr; selector: Types.OSType; infoPtr: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
  570.     (*$IF NOT GENERATINGCFM*)
  571.     INLINE PASCAL $203C, $063C, $0018, $A800;
  572.     (*$END*)
  573. PROCEDURE SndSetInfo*(chan: SndChannelPtr; selector: Types.OSType; infoPtr: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
  574.     (*$IF NOT GENERATINGCFM*)
  575.     INLINE PASCAL $203C, $0640, $0018, $A800;
  576.     (*$END*)
  577. CONST
  578.     uppSndCallBackProcInfo* = $000003C0; (* PROCEDURE (4 byte param, 4 byte param); *)
  579.  
  580. PROCEDURE NewSndCallBackProc*(userRoutine: SndCallBackProcPtr): SndCallBackUPP;
  581.     (*$IF NOT GENERATINGCFM *)
  582.     INLINE PASCAL $2E9F;
  583.     (*$END*)
  584.  
  585. PROCEDURE CallSndCallBackProc*(chan: SndChannelPtr; VAR cmd: SndCommand; userRoutine: SndCallBackUPP);
  586.     (*$IF NOT GENERATINGCFM*)
  587.     INLINE PASCAL $205F, $4E90;
  588.     (*$END*)
  589.  
  590. (* $ALIGN RESET*)
  591. (* $POP*)
  592.  
  593.  END Sound.
  594.